package top.bugger168.checkcode.service;

import top.bugger168.checkcode.model.CheckCodeParamsDto;
import top.bugger168.checkcode.model.CheckCodeResultDto;

/**
 * 校验码服务
 *
 * @author wanghaidong
 * @date 2023/08/28
 */
public interface CheckCodeService {


    /**
     *  生成验证码
     * @param checkCodeParamsDto 生成验证码参数
     * @return top.bugger168.checkcode.model.CheckCodeResultDto 验证码结果
    */
     CheckCodeResultDto generate(CheckCodeParamsDto checkCodeParamsDto);

     /**
      *  校验验证码
      * @return boolean
     */
    boolean verify(String key, String code);


    /**
     *  验证码生成器
    */
    interface CheckCodeGenerator{
        /**
         * 验证码生成
         * @return 验证码
         */
        String generate(int length);

    }

    /**
     *  key生成器
     */
    interface KeyGenerator{

        /**
         * key生成
         * @return 验证码
         */
        String generate(String prefix);
    }


    /**
     *  验证码存储
     */
    interface CheckCodeStore{
        /**
         *  向缓存设置key
         * @param key key
         * @param value value
         * @param expire 过期时间,单位秒
        */
        void set(String key, String value, Integer expire);
        String get(String key);
        void remove(String key);
    }
}
